
 
void setLedStatus(int led1, int led2, int led3, int led4, int led5) 
{
    digitalWrite(pinLed1, led1);
    digitalWrite(pinLed2, led2);
    digitalWrite(pinLed3, led3);
    digitalWrite(pinLed4, led4);
    digitalWrite(pinLed5, led5);
}

float getTemperature()
{
  //Primero la Vout del divisor de tensión donde está la NTCs
  float Vout=(Vin/1024)*(analogRead(analogPin1));
  //Ahora la resistencia de la NTC (en ohm)
  float Rntc=(Vout*Rfija)/(Vin-Vout);
  //Calculamos la temperatura en Kelvin resolviendo la ecuación
  float TempK = Beta/(log(Rntc/R25)+(Beta/T0));
  //Y ahora la pasamos a celsius
  float TempC = TempK - 273.15;
  return TempC;
}

double getBaseTempLevel()
{
    //Primero leemos el potenciómetro
  double tempMin = analogRead(analogPin2);
  //Mapeamos los valores de [0,1023] a valores de [-100,800]
  //Y lo dividimos entre 10 para darle un decimal
  tempMin = map(tempMin, 0, 1023, -100, 800) / 10;
  return tempMin;
}

bool alarm(float minTemp, float currentTemp)
{
  Serial.println("----------------- ¡¡ ALARMA !!-----------------------");
  Serial.println("----------------- ¡¡ ALARMA !!-----------------------");
  Serial.println("----------------- ¡¡ ALARMA !!-----------------------");
  Serial.println("----------------- ¡¡ ALARMA !!-----------------------");
  
  playAlarmBuzz(minTemp, currentTemp);
  
  //OJO, NO ENVIAR UN SMS EN CADA CICLO DE DETECCIÓN. SOLO UNO POR CADA PASO
  //DE FRÍO A CALOR
  if (!sentSmsAlarm)
  {
    turnOnGprsModule();
    
    String smsTxt = "Alarma de temperatura. Actual: " + String(currentTemp) +  ". Deseada: " + String(minTemp);

    //Lo imprimo en el puerto serie para ver cómo queda.
    Serial.println("Texto del SMS");
    Serial.println(smsTxt);
    
    char smsTxtChar[256]; // Or something long enough to hold the longest file name you will ever use.
    smsTxt.toCharArray(smsTxtChar, sizeof(smsTxt));
    
    sendSms("653554133", smsTxtChar);
    
    sentSmsAlarm = true; //para que no se envíe otra alarma en el siguiente loop
    //TODO: rearmar alarma cuando baje la temperatura lo suficiente
  }
}

void playAlarmBuzz(float minTemp, float currentTemp)
{

  //TODO: Zumbido más insistente si nos pasamos mucho de temperatura
  
  //zumbido
  /*
  * The calculation of the tones is made following the mathematical
  * operation:
  *
  *       timeHigh = 1/(2 * toneFrequency) = period / 2
  *
  * where the different tones are described as in the table:
  *
  * note         frequency       period  PW (timeHigh)   
  * c            261 Hz          3830    1915    
  * d            294 Hz          3400    1700    
  * e            329 Hz          3038    1519    
  * f            349 Hz          2864    1432    
  * g            392 Hz          2550    1275    
  * a            440 Hz          2272    1136    
  * b            493 Hz          2028    1014    
  * C            523 Hz          1912    956
  *
  */
  int repeatToneSequence =  5;
  for (int i = 0; i < repeatToneSequence; i++)
  {
    playTone(500, 25);
    playTone(1000, 25);
    playTone(1500, 50);
  }
}

void playTone(int hz, int cycles)
{
    int pulseWidth = 1000000 / (2 * hz);
    for (int toneCycles = 0; toneCycles < 60; toneCycles++)
    {
      analogWrite(speakerOut,500);
      delayMicroseconds(pulseWidth);
      analogWrite(speakerOut, 0);
      delayMicroseconds(pulseWidth);
    }
}


 

